public class Test {
           //大驼峰
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        //一个为假就为假
        //当表达式1为假的时候，就不会执行表达式2了  短路与
        System.out.println(a == 1 && b == 2);//左真右真  结果为真
        System.out.println(a == 1 && b > 100);//左真右假  结果为假
        System.out.println(a > 100 && b == 2);//左假右真  结果为假
        System.out.println(a > 100 && b > 100);//左假右假  结果为假
        System.out.println("========================");
        int x = 1;
        int y = 2;
        //一个为真就为真
        //当表达式1为真的时候，就不会执行表达式2了  短路或
        System.out.println(x == 1 || y == 2);//左真右真  结果为真
        System.out.println(x == 1 || y > 100);//左真右假  结果为真
        System.out.println(x > 100 || y == 2);//左假右真  结果为真
        System.out.println(x > 100 || y > 100);//左假右假  结果为假
        System.out.println("========================");
        int m = 1;
        System.out.println(!(m == 1));//!真  结果假
        System.out.println(!(m == 2));//!假  结果真
        System.out.println("========================");
        //特例  &也是逻辑与但是不能表示短路
        //|也是逻辑或但不能表示短路
        //【不建议这样写代码！！】
        //System.out.println(10 > 20 & 10 / 0 == 0);//程序抛出异常
        //System.out.println(10 < 20 | 10 / 0 == 0);//程序抛出异常
        System.out.println(10 < 20 || 10 / 0 == 0);//true
        System.out.println("========================");
        //  << 左移 右边补0：左移一位相当于乘以2的一次方
        //  >> 右移 正数补0负数补1：右移一位相当于除以2的一次方
        //  >>>无符号右移  左边统一补0
        //  <<<没有这个符号
        //布尔表达式1？表达式2：表达式3  如果表达式1为真则执行表达式2 否则执行表达式3
        int num1 = 10;
        int num2 = 20;
        int max = num1 > num2 ? num1 : num2;
        System.out.println(max);
        int num3 = num1 * (num2 + 5);
        System.out.println(num3);


    }
    public static void main7(String[] args) {
        System.out.println(5/2);//2
        System.out.println((float)5/2);//2.5  5.0/2
        System.out.println(5/(float)2);//2.5  5/2.0
        System.out.println((float) (5/2));//2.5 error 2.0 把5/2的结果2转为float
        //System.out.println(10/0);//算数异常
        System.out.println("========================");
        System.out.println(10%3);//1
        System.out.println(10%-3);//1
        System.out.println(-10%3);//-1  列式计算
        System.out.println(-10%-3);//1  列式计算
        System.out.println(11.5%2);//1.5
        System.out.println("========================");
        int a = 10;
        a += 10;//a = a + 10;
        System.out.println(a);
        long d = 100;
        int c = 9;
        //c = c + d;会报错 左边int  右边long
        c += d;//c = (int)(c + d);  特点：运算符会帮我们进行类型转换
        System.out.println(c);
        System.out.println("========================");
        int x = 10;
        //int y = ++x;//x=x+1  y=x
        int y = x++;//y=x x=x+1
        System.out.println(x);
        System.out.println(y);
        System.out.println("========================");
        int u = 10;
        int v = 20;//=代表赋值 ==代表判断是否相等
        //关系运算符得到的结果要么是true 要么是false
        System.out.println(u == v);//false
        System.out.println(u != v);//true
        System.out.println(u < v);//true
        System.out.println(u > v);//false
        System.out.println(u <= v);//true
        System.out.println(u >= v);//false
        //System.out.println(3 < u < 5); error
        System.out.println("========================");
    }
    public static void main6(String[] args) {
        //在C语言中 没有字符串这种数据类型，要用数组表示
        //在java中，有字符串这种数据类型，是引用数据类型，没有包装类
        String str = "hello";
        System.out.println(str);
        System.out.println("========================");
        //int和string相互转换
        int a = 100;
        //调用String这个类的库方法 int-->string
        String str1 = String.valueOf(a);
        System.out.println(str1);

        String str2 = a + "ab";//+就是拼接的意思
        System.out.println(str2);
        String str3 = 10 + 20 + "x";
        String str4 = "x" + 10 + 20;
        System.out.println(str3);//30x
        System.out.println(str4);//x1020
        System.out.println("========================");
        //string-->int
        String s1 = "1009";
        //调用Integer的方法实现转换
        int ret = Integer.valueOf(s1);
        System.out.println(ret+1);

        int ret2 = Integer.parseInt(s1);
        System.out.println(ret2+1);
        System.out.println("========================");

    }
    public static void main5(String[] args) {
        int a = 10;
        long b = 100;
        //int c = a + b; error 等号右边是long类型  左边是int类型
        int c = (int)(a + b);//强制类型转换
        long d = a + b;
        System.out.println("========================");
        //小于4个字节的内容会提升为int参与运算
        byte b1 = 125;
        byte b2 = 123;
        //byte b3 = b1 + b2; error 左边是byte 右边是int
        byte b3 = (byte)(b1 + b2);//强制类型转换 数据会丢失输出不是正确答案 248超过了byte表示的范围
        int b4 = b1 + b2;
        System.out.println(b3);//-8
        System.out.println(b4);
        System.out.println("========================");

    }
    public static void main4(String[] args) {
        int a = 10;
        long b = 100L;
        //a = b; error 不可以赋值8个给4个字节
        a = (int)b;//强制类型转换！！boolean不能强制类型转换

        b = a;//隐式类型转换 可以把小的给大的

        //byte c = 256;error 256超出Byte所能表示的数据范围，系统会把256当作int型
        byte c = (byte)256;//如果出现数据丢失，自己负责
        byte c2 = 127;
        //Java当中对于字面值的直接赋值是允许的，前提是没有超过表示范围
        System.out.println("========================");
    }
    public static void main3(String[] args) {
        //没有负数！！
        char ch = 'A';//2个字节 这个是和C有区别的 Character
        System.out.println(ch);
        char ch2 = '高';
        System.out.println(ch2);
        System.out.println("========================");
        //C中 0是假，非0是真，但是java当中真假只有true和false
        //不能和任何类型进行转换
        boolean flag = true;//没有明确规定占用几个字节
        System.out.println(flag);
        System.out.println("========================");
        //Boolean
    }
    public static void main2(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a / b);//0
        //从数学上来说，就是0.5，但是此时在程序上说不能保存小数

        //精确到小数点后XXXX位
        double num = 1.1;
        System.out.println(num * num);//1.2100000000000002

        System.out.println("========================");
        //float f = 12.5;//error 12.5默认double型
        float f = 12.5f;//单精度浮点类型  4字节
        System.out.println(f);
        System.out.println("========================");

    }
    public static void main1() {
        System.out.println("hello");
        //长整型  8个字节  -2^63  --  2^63-1
        long b = 10L;//不建议用小写的l，容易看错
        System.out.println(b);
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
        System.out.println("========================");

        short sh = 10;//短整型 2个字节  -2^15  --  2^15-1
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
        System.out.println("========================");

        byte b1 = 10;//字节型  1个字节  -2^7 -- 2^7-1
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);
        System.out.println("========================");

        double d = 12.5;//8个字节
        System.out.println(d);
        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);//4.9E-324 输出的是浮点数最小的非负整数
        System.out.println("========================");
    }
}
